Introduction

Since 1990, the Clery Act has required that universities receiving federal funding publish an annual security report.

Each annual security report includes statistics of campus crime for the past three years and a record of the university’s efforts to improve campus safety.

Although Hamline is a private university, it receives federal funding and must publish an annual security report. This page is a graphical representation of those reports from 2001 to 2021.


The OPE separates crime incidents into a few main categories and subcategories:

Arrests and Referrals for Disciplinary Actions

  • Weapons law violations
  • Drug abuse violations
  • Liquor law violations

Criminal Offenses

  • Criminal homicide: murder and non-negligent manslaughter, manslaughter by negligence
  • Sexual assault: rape, fondling, incest, statutory rape
  • Robbery
  • Aggravated assault
  • Burglary
  • Motor vehicle theft
  • Arson

Hate Crimes

  • (any previously-mentioned Criminal Offense)
  • Larceny-theft
  • Simple assault
  • Intimidation
  • Destruction/damage/vandalism of property

Violence Against Women Act (VAWA) Offenses

  • Domestic violence
  • Dating violence
  • Stalking


The crimes reported by Hamline per the Clery Act are not limited to campus buildings but also include many related spaces in the surrounding community including the following:

  • On-campus (anywhere)
  • On-campus student housing
  • Public property within campus bounds
  • Public property immediately adjacent to the campus
  • Noncampus buildings and property owned or controlled by the organization that are used for educational purposes and frequently used by students but not a part of the core campus, or those owned or controlled by a student organization officially recognized by the institution


These data are sourced from the US Office of Postsecondary Education (OPE) Campus Safety & Security data portal.

The Data



Arrests

Disciplinary Actions

Criminal Offenses

Hate Crimes

ˆ

Violence Against Women Act (VAWA) Offenses

Categories with No Incidents Reported




Arrests

__ Noncampus
______Illegal Weapons Possession
______Drug Law Violations
______Liquor Law Violations

__ On Campus
______Illegal Weapons Possession

__ On Campus Student Housing Facilities
______Illegal Weapons Possession

__ Public Property
______Illegal Weapons Possession


Disciplinary Actions

__ Noncampus
______Illegal Weapons Possession

__ Public Property
______Illegal Weapons Possession
______Drug Law Violations
______Liquor Law Violations


Hate Crimes

__ Noncampus
______Murder Non Negligent Manslaughter
______Murder Non Negligent Manslaughter Race
______Murder Non Negligent Manslaughter Religion
______Murder Non Negligent Manslaughter Sexual Orientation
______Murder Non Negligent Manslaughter Gender
______Murder Non Negligent Manslaughter Gender Identity
______Murder Non Negligent Manslaughter Disability
______Murder Non Negligent Manslaughter Ethnicity National Origin
______Murder Non Negligent Manslaughter Ethnicity
______Murder Non Negligent Manslaughter National Origin
______Negligent Manslaughter
______Negligent Manslaughter Race
______Negligent Manslaughter Religion
______Negligent Manslaughter Sexual Orientation
______Negligent Manslaughter Gender
______Negligent Manslaughter Disability
______Negligent Manslaughter Ethnicity National Origin
______Sex Offenses Forcible
______Sex Offenses Forcible Race
______Sex Offenses Forcible Religion
______Sex Offenses Forcible Sexual Orientation
______Sex Offenses Forcible Gender
______Sex Offenses Forcible Disability
______Sex Offenses Forcible Ethnicity National Origin
______Sex Offenses Non Forcible
______Sex Offenses Non Forcible Race
______Sex Offenses Non Forcible Religion
______Sex Offenses Non Forcible Sexual Orientation
______Sex Offenses Non Forcible Gender
______Sex Offenses Non Forcible Disability
______Sex Offenses Non Forcible Ethnicity National Origin
______Rape
______Rape Race
______Rape Religion
______Rape Forcible Sexual Orientation
______Rape Gender
______Rape Gender Identity
______Rape Disability
______Rape Ethnicity
______Rape National Origin
______Fondling
______Fondling Race
______Fondling Religion
______Fondling Forcible Sexual Orientation
______Fondling Gender
______Fondling Gender Identity
______Fondling Disability
______Fondling Ethnicity
______Fondling National Origin
______Incest
______Incest Race
______Incest Religion
______Incest Forcible Sexual Orientation
______Incest Gender
______Incest Gender Identity
______Incest Disability
______Incest Ethnicity
______Incest National Origin
______Statutory Rape
______Statutory Rape Race
______Statutory Rape Religion
______Statutory Rape Forcible Sexual Orientation
______Statutory Rape Gender
______Statutory Rape Gender Identity
______Statutory Rape Disability
______Statutory Rape Ethnicity
______Statutory Rape National Origin
______Robbery
______Robbery Race
______Robbery Religion
______Robbery Sexual Orientation
______Robbery Gender
______Robbery Gender Identity
______Robbery Disability
______Robbery Ethnicity National Origin
______Robbery Ethnicity
______Robbery National Origin
______Aggravated Assault
______Aggravated Assault Race
______Aggravated Assault Religion
______Aggravated Assault Sexual Orientation
______Aggravated Assault Gender
______Aggravated Assault Gender Identity
______Aggravated Assault Disability
______Aggravated Assault Ethnicity National Origin
______Aggravated Assault Ethnicity
______Aggravated Assault National Origin
______Burglary
______Burglary Race
______Burglary Religion
______Burglary Sexual Orientation
______Burglary Gender
______Burglary Gender Identity
______Burglary Disability
______Burglary Ethnicity National Origin
______Burglary Ethnicity
______Burglary National Origin
______Motor Vehicle Theft
______Motor Vehicle Theft Race
______Motor Vehicle Theft Religion
______Motor Vehicle Theft Sexual Orientation
______Motor Vehicle Theft Gender
______Motor Vehicle Theft Gender Identity
______Motor Vehicle Theft Disability
______Motor Vehicle Theft Ethnicity National Origin
______Motor Vehicle Theft Ethnicity
______Motor Vehicle Theft National Origin
______Arson
______Arson Race
______Arson Religion
______Arson Sexual Orientation
______Arson Gender
______Arson Gender Identity
______Arson Disability
______Arson Ethnicity National Origin
______Arson Ethnicity
______Arson National Origin
______Simple Assault
______Simple Assault Race
______Simple Assault Religion
______Simple Assault Sexual Orientation
______Simple Assault Gender
______Simple Assault Gender Identity
______Simple Assault Disability
______Simple Assault Ethnicity National Origin
______Simple Assault Ethnicity
______Simple Assault National Origin
______Larceny Theft
______Larceny Theft Race
______Larceny Theft Religion
______Larceny Theft Sexual Orientation
______Larceny Theft Gender
______Larceny Theft Gender Identity
______Larceny Theft Disability
______Larceny Theft Ethnicity National Origin
______Larceny Theft Ethnicity
______Larceny Theft National Origin
______Intimidation
______Intimidation Race
______Intimidation Religion
______Intimidation Sexual Orientation
______Intimidation Gender
______Intimidation Gender Identity
______Intimidation Disability
______Intimidation Ethnicity National Origin
______Intimidation Ethnicity
______Intimidation National Origin
______Destruction Damage Vandalism Of Property
______Destruction Damage Vandalism Of Property Race
______Destruction Damage Vandalism Of Property Religion
______Destruction Damage Vandalism Of Property Sexual Orientation
______Destruction Damage Vandalism Of Property Gender
______Destruction Damage Vandalism Of Property Gender Identity
______Destruction Damage Vandalism Of Property Disability
______Destruction Damage Vandalism Of Property Ethnicity National Origin
______Destruction Damage Vandalism Of Property Ethnicity
______Destruction Damage Vandalism Of Property National Origin

__ On Campus
______Murder Non Negligent Manslaughter
______Murder Non Negligent Manslaughter Race
______Murder Non Negligent Manslaughter Religion
______Murder Non Negligent Manslaughter Sexual Orientation
______Murder Non Negligent Manslaughter Gender
______Murder Non Negligent Manslaughter Gender Identity
______Murder Non Negligent Manslaughter Disability
______Murder Non Negligent Manslaughter Ethnicity National Origin
______Murder Non Negligent Manslaughter Ethnicity
______Murder Non Negligent Manslaughter National Origin
______Negligent Manslaughter
______Negligent Manslaughter Race
______Negligent Manslaughter Religion
______Negligent Manslaughter Sexual Orientation
______Negligent Manslaughter Gender
______Negligent Manslaughter Disability
______Negligent Manslaughter Ethnicity National Origin
______Sex Offenses Forcible
______Sex Offenses Forcible Race
______Sex Offenses Forcible Religion
______Sex Offenses Forcible Sexual Orientation
______Sex Offenses Forcible Gender
______Sex Offenses Forcible Disability
______Sex Offenses Forcible Ethnicity National Origin
______Sex Offenses Non Forcible
______Sex Offenses Non Forcible Race
______Sex Offenses Non Forcible Religion
______Sex Offenses Non Forcible Sexual Orientation
______Sex Offenses Non Forcible Gender
______Sex Offenses Non Forcible Disability
______Sex Offenses Non Forcible Ethnicity National Origin
______Rape
______Rape Race
______Rape Religion
______Rape Forcible Sexual Orientation
______Rape Gender
______Rape Gender Identity
______Rape Disability
______Rape Ethnicity
______Rape National Origin
______Fondling
______Fondling Race
______Fondling Religion
______Fondling Forcible Sexual Orientation
______Fondling Gender
______Fondling Gender Identity
______Fondling Disability
______Fondling Ethnicity
______Fondling National Origin
______Incest
______Incest Race
______Incest Religion
______Incest Forcible Sexual Orientation
______Incest Gender
______Incest Gender Identity
______Incest Disability
______Incest Ethnicity
______Incest National Origin
______Statutory Rape
______Statutory Rape Race
______Statutory Rape Religion
______Statutory Rape Forcible Sexual Orientation
______Statutory Rape Gender
______Statutory Rape Gender Identity
______Statutory Rape Disability
______Statutory Rape Ethnicity
______Statutory Rape National Origin
______Robbery
______Robbery Race
______Robbery Religion
______Robbery Sexual Orientation
______Robbery Gender
______Robbery Gender Identity
______Robbery Disability
______Robbery Ethnicity National Origin
______Robbery Ethnicity
______Robbery National Origin
______Aggravated Assault
______Aggravated Assault Race
______Aggravated Assault Religion
______Aggravated Assault Sexual Orientation
______Aggravated Assault Gender
______Aggravated Assault Gender Identity
______Aggravated Assault Disability
______Aggravated Assault Ethnicity National Origin
______Aggravated Assault Ethnicity
______Aggravated Assault National Origin
______Burglary
______Burglary Race
______Burglary Religion
______Burglary Sexual Orientation
______Burglary Gender
______Burglary Gender Identity
______Burglary Disability
______Burglary Ethnicity National Origin
______Burglary Ethnicity
______Burglary National Origin
______Motor Vehicle Theft
______Motor Vehicle Theft Race
______Motor Vehicle Theft Religion
______Motor Vehicle Theft Sexual Orientation
______Motor Vehicle Theft Gender
______Motor Vehicle Theft Gender Identity
______Motor Vehicle Theft Disability
______Motor Vehicle Theft Ethnicity National Origin
______Motor Vehicle Theft Ethnicity
______Motor Vehicle Theft National Origin
______Arson Race
______Arson Religion
______Arson Sexual Orientation
______Arson Gender
______Arson Gender Identity
______Arson Disability
______Arson Ethnicity National Origin
______Arson Ethnicity
______Arson National Origin
______Simple Assault
______Simple Assault Race
______Simple Assault Religion
______Simple Assault Sexual Orientation
______Simple Assault Gender
______Simple Assault Gender Identity
______Simple Assault Disability
______Simple Assault Ethnicity National Origin
______Simple Assault Ethnicity
______Simple Assault National Origin
______Larceny Theft
______Larceny Theft Race
______Larceny Theft Religion
______Larceny Theft Sexual Orientation
______Larceny Theft Gender
______Larceny Theft Gender Identity
______Larceny Theft Disability
______Larceny Theft Ethnicity National Origin
______Larceny Theft Ethnicity
______Larceny Theft National Origin
______Intimidation Race
______Intimidation Religion
______Intimidation Gender
______Intimidation Gender Identity
______Intimidation Disability
______Intimidation Ethnicity
______Intimidation National Origin
______Destruction Damage Vandalism Of Property Religion
______Destruction Damage Vandalism Of Property Gender
______Destruction Damage Vandalism Of Property Gender Identity
______Destruction Damage Vandalism Of Property Disability
______Destruction Damage Vandalism Of Property Ethnicity National Origin
______Destruction Damage Vandalism Of Property Ethnicity
______Destruction Damage Vandalism Of Property National Origin

__ On Campus Student Housing Facilities
______Murder Non Negligent Manslaughter
______Murder Non Negligent Manslaughter Race
______Murder Non Negligent Manslaughter Religion
______Murder Non Negligent Manslaughter Sexual Orientation
______Murder Non Negligent Manslaughter Gender
______Murder Non Negligent Manslaughter Gender Identity
______Murder Non Negligent Manslaughter Disability
______Murder Non Negligent Manslaughter Ethnicity National Origin
______Murder Non Negligent Manslaughter Ethnicity
______Murder Non Negligent Manslaughter National Origin
______Negligent Manslaughter
______Negligent Manslaughter Race
______Negligent Manslaughter Religion
______Negligent Manslaughter Sexual Orientation
______Negligent Manslaughter Gender
______Negligent Manslaughter Disability
______Negligent Manslaughter Ethnicity National Origin
______Sex Offenses Forcible
______Sex Offenses Forcible Race
______Sex Offenses Forcible Religion
______Sex Offenses Forcible Sexual Orientation
______Sex Offenses Forcible Gender
______Sex Offenses Forcible Disability
______Sex Offenses Forcible Ethnicity National Origin
______Sex Offenses Non Forcible
______Sex Offenses Non Forcible Race
______Sex Offenses Non Forcible Religion
______Sex Offenses Non Forcible Sexual Orientation
______Sex Offenses Non Forcible Gender
______Sex Offenses Non Forcible Disability
______Sex Offenses Non Forcible Ethnicity National Origin
______Rape
______Rape Race
______Rape Religion
______Rape Forcible Sexual Orientation
______Rape Gender
______Rape Gender Identity
______Rape Disability
______Rape Ethnicity
______Rape National Origin
______Fondling
______Fondling Race
______Fondling Religion
______Fondling Forcible Sexual Orientation
______Fondling Gender
______Fondling Gender Identity
______Fondling Disability
______Fondling Ethnicity
______Fondling National Origin
______Incest
______Incest Race
______Incest Religion
______Incest Forcible Sexual Orientation
______Incest Gender
______Incest Gender Identity
______Incest Disability
______Incest Ethnicity
______Incest National Origin
______Statutory Rape
______Statutory Rape Race
______Statutory Rape Religion
______Statutory Rape Forcible Sexual Orientation
______Statutory Rape Gender
______Statutory Rape Gender Identity
______Statutory Rape Disability
______Statutory Rape Ethnicity
______Statutory Rape National Origin
______Robbery
______Robbery Race
______Robbery Religion
______Robbery Sexual Orientation
______Robbery Gender
______Robbery Gender Identity
______Robbery Disability
______Robbery Ethnicity National Origin
______Robbery Ethnicity
______Robbery National Origin
______Aggravated Assault
______Aggravated Assault Race
______Aggravated Assault Religion
______Aggravated Assault Sexual Orientation
______Aggravated Assault Gender
______Aggravated Assault Gender Identity
______Aggravated Assault Disability
______Aggravated Assault Ethnicity National Origin
______Aggravated Assault Ethnicity
______Aggravated Assault National Origin
______Burglary
______Burglary Race
______Burglary Religion
______Burglary Sexual Orientation
______Burglary Gender
______Burglary Gender Identity
______Burglary Disability
______Burglary Ethnicity National Origin
______Burglary Ethnicity
______Burglary National Origin
______Motor Vehicle Theft
______Motor Vehicle Theft Race
______Motor Vehicle Theft Religion
______Motor Vehicle Theft Sexual Orientation
______Motor Vehicle Theft Gender
______Motor Vehicle Theft Gender Identity
______Motor Vehicle Theft Disability
______Motor Vehicle Theft Ethnicity National Origin
______Motor Vehicle Theft Ethnicity
______Motor Vehicle Theft National Origin
______Arson Race
______Arson Religion
______Arson Sexual Orientation
______Arson Gender
______Arson Gender Identity
______Arson Disability
______Arson Ethnicity National Origin
______Arson Ethnicity
______Arson National Origin
______Simple Assault
______Simple Assault Race
______Simple Assault Religion
______Simple Assault Sexual Orientation
______Simple Assault Gender
______Simple Assault Gender Identity
______Simple Assault Disability
______Simple Assault Ethnicity National Origin
______Simple Assault Ethnicity
______Simple Assault National Origin
______Larceny Theft
______Larceny Theft Race
______Larceny Theft Religion
______Larceny Theft Sexual Orientation
______Larceny Theft Gender
______Larceny Theft Gender Identity
______Larceny Theft Disability
______Larceny Theft Ethnicity National Origin
______Larceny Theft Ethnicity
______Larceny Theft National Origin
______Intimidation Race
______Intimidation Religion
______Intimidation Gender
______Intimidation Gender Identity
______Intimidation Disability
______Intimidation Ethnicity National Origin
______Intimidation Ethnicity
______Intimidation National Origin
______Destruction Damage Vandalism Of Property Religion
______Destruction Damage Vandalism Of Property Sexual Orientation
______Destruction Damage Vandalism Of Property Gender
______Destruction Damage Vandalism Of Property Gender Identity
______Destruction Damage Vandalism Of Property Disability
______Destruction Damage Vandalism Of Property Ethnicity National Origin
______Destruction Damage Vandalism Of Property Ethnicity
______Destruction Damage Vandalism Of Property National Origin

__ Public Property
______Murder Non Negligent Manslaughter
______Murder Non Negligent Manslaughter Race
______Murder Non Negligent Manslaughter Religion
______Murder Non Negligent Manslaughter Sexual Orientation
______Murder Non Negligent Manslaughter Gender
______Murder Non Negligent Manslaughter Gender Identity
______Murder Non Negligent Manslaughter Disability
______Murder Non Negligent Manslaughter Ethnicity National Origin
______Murder Non Negligent Manslaughter Ethnicity
______Murder Non Negligent Manslaughter National Origin
______Negligent Manslaughter
______Negligent Manslaughter Race
______Negligent Manslaughter Religion
______Negligent Manslaughter Sexual Orientation
______Negligent Manslaughter Gender
______Negligent Manslaughter Disability
______Negligent Manslaughter Ethnicity National Origin
______Sex Offenses Forcible
______Sex Offenses Forcible Race
______Sex Offenses Forcible Religion
______Sex Offenses Forcible Sexual Orientation
______Sex Offenses Forcible Gender
______Sex Offenses Forcible Disability
______Sex Offenses Forcible Ethnicity National Origin
______Sex Offenses Non Forcible
______Sex Offenses Non Forcible Race
______Sex Offenses Non Forcible Religion
______Sex Offenses Non Forcible Sexual Orientation
______Sex Offenses Non Forcible Gender
______Sex Offenses Non Forcible Disability
______Sex Offenses Non Forcible Ethnicity National Origin
______Rape
______Rape Race
______Rape Religion
______Rape Forcible Sexual Orientation
______Rape Gender
______Rape Gender Identity
______Rape Disability
______Rape Ethnicity
______Rape National Origin
______Fondling
______Fondling Race
______Fondling Religion
______Fondling Forcible Sexual Orientation
______Fondling Gender
______Fondling Gender Identity
______Fondling Disability
______Fondling Ethnicity
______Fondling National Origin
______Incest
______Incest Race
______Incest Religion
______Incest Forcible Sexual Orientation
______Incest Gender
______Incest Gender Identity
______Incest Disability
______Incest Ethnicity
______Incest National Origin
______Statutory Rape
______Statutory Rape Race
______Statutory Rape Religion
______Statutory Rape Forcible Sexual Orientation
______Statutory Rape Gender
______Statutory Rape Gender Identity
______Statutory Rape Disability
______Statutory Rape Ethnicity
______Statutory Rape National Origin
______Robbery
______Robbery Race
______Robbery Religion
______Robbery Sexual Orientation
______Robbery Gender
______Robbery Gender Identity
______Robbery Disability
______Robbery Ethnicity National Origin
______Robbery Ethnicity
______Robbery National Origin
______Aggravated Assault
______Aggravated Assault Race
______Aggravated Assault Religion
______Aggravated Assault Sexual Orientation
______Aggravated Assault Gender
______Aggravated Assault Gender Identity
______Aggravated Assault Disability
______Aggravated Assault Ethnicity National Origin
______Aggravated Assault Ethnicity
______Aggravated Assault National Origin
______Burglary
______Burglary Race
______Burglary Religion
______Burglary Sexual Orientation
______Burglary Gender
______Burglary Gender Identity
______Burglary Disability
______Burglary Ethnicity National Origin
______Burglary Ethnicity
______Burglary National Origin
______Motor Vehicle Theft
______Motor Vehicle Theft Race
______Motor Vehicle Theft Religion
______Motor Vehicle Theft Sexual Orientation
______Motor Vehicle Theft Gender
______Motor Vehicle Theft Gender Identity
______Motor Vehicle Theft Disability
______Motor Vehicle Theft Ethnicity National Origin
______Motor Vehicle Theft Ethnicity
______Motor Vehicle Theft National Origin
______Arson
______Arson Race
______Arson Religion
______Arson Sexual Orientation
______Arson Gender
______Arson Gender Identity
______Arson Disability
______Arson Ethnicity National Origin
______Arson Ethnicity
______Arson National Origin
______Simple Assault
______Simple Assault Race
______Simple Assault Religion
______Simple Assault Sexual Orientation
______Simple Assault Gender
______Simple Assault Gender Identity
______Simple Assault Disability
______Simple Assault Ethnicity National Origin
______Simple Assault Ethnicity
______Simple Assault National Origin
______Larceny Theft
______Larceny Theft Race
______Larceny Theft Religion
______Larceny Theft Sexual Orientation
______Larceny Theft Gender
______Larceny Theft Gender Identity
______Larceny Theft Disability
______Larceny Theft Ethnicity National Origin
______Larceny Theft Ethnicity
______Larceny Theft National Origin
______Intimidation Race
______Intimidation Religion
______Intimidation Sexual Orientation
______Intimidation Gender
______Intimidation Gender Identity
______Intimidation Disability
______Intimidation Ethnicity
______Intimidation National Origin
______Destruction Damage Vandalism Of Property Religion
______Destruction Damage Vandalism Of Property Gender
______Destruction Damage Vandalism Of Property Gender Identity
______Destruction Damage Vandalism Of Property Disability
______Destruction Damage Vandalism Of Property Ethnicity National Origin
______Destruction Damage Vandalism Of Property Ethnicity
______Destruction Damage Vandalism Of Property National Origin


VAWA Offenses

__ Noncampus
______Domestic Violence
______Stalking

__ Public Property
______Dating Violence
______Stalking

LS0tCnRpdGxlOiAiSGFtbGluZSdzIENhbXB1cyBDcmltZSBEYXRhIgphdXRob3I6ICJCZW4gUm9zZW5iZXJnIGZvciAqVGhlIE9yYWNsZSoiCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgZm9ybWF0PSclQiAlZCwgJVknKWAiCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0Ci0tLQoKPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1NZXJyaXdlYXRoZXImZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgoKPHN0eWxlPgogIHAsIGg0IHsKICAgIGZvbnQtZmFtaWx5OiBBcmlhbDsKICB9CgogIGgxLCBoMiB7CiAgICBmb250LWZhbWlseTogTWVycml3ZWF0aGVyOwogIH0KICAKICAuZGF0ZSB7CiAgICBmb250LXdlaWdodDogbGlnaHRlcjsKICB9CiAgCiAgLmJ0biB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KICAKICAudG9jaWZ5LXN1YmhlYWRlciB7CiAgICBkaXNwbGF5OiBibG9jazsKICB9CiAgCjwvc3R5bGU+Cgo8YnIgLz4KPGJyIC8+CgoKIyBJbnRyb2R1Y3Rpb24KClNpbmNlIDE5OTAsIHRoZSBbQ2xlcnkgQWN0XShodHRwczovL3d3dy5jbGVyeWNlbnRlci5vcmcvdGhlLWNsZXJ5LWFjdCkgaGFzIHJlcXVpcmVkIHRoYXQgdW5pdmVyc2l0aWVzIHJlY2VpdmluZyBmZWRlcmFsIGZ1bmRpbmcgcHVibGlzaCBhbiBhbm51YWwgc2VjdXJpdHkgcmVwb3J0LgoKRWFjaCBhbm51YWwgc2VjdXJpdHkgcmVwb3J0IGluY2x1ZGVzIHN0YXRpc3RpY3Mgb2YgY2FtcHVzIGNyaW1lIGZvciB0aGUgcGFzdCB0aHJlZSB5ZWFycyBhbmQgYSByZWNvcmQgb2YgdGhlIHVuaXZlcnNpdHkncyBlZmZvcnRzIHRvIGltcHJvdmUgY2FtcHVzIHNhZmV0eS4KCkFsdGhvdWdoIEhhbWxpbmUgaXMgYSBwcml2YXRlIHVuaXZlcnNpdHksIGl0IHJlY2VpdmVzIGZlZGVyYWwgZnVuZGluZyBhbmQgbXVzdCBwdWJsaXNoIGFuIGFubnVhbCBzZWN1cml0eSByZXBvcnQuIFRoaXMgcGFnZSBpcyBhIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aG9zZSByZXBvcnRzIGZyb20gMjAwMSB0byAyMDIxLlwKCjxiciAvPgoKVGhlIE9QRSBzZXBhcmF0ZXMgY3JpbWUgaW5jaWRlbnRzIGludG8gYSBmZXcgbWFpbiBjYXRlZ29yaWVzIGFuZCBzdWJjYXRlZ29yaWVzOgoKKipBcnJlc3RzIGFuZCBSZWZlcnJhbHMgZm9yIERpc2NpcGxpbmFyeSBBY3Rpb25zKioKCiogV2VhcG9ucyBsYXcgdmlvbGF0aW9ucwoqIERydWcgYWJ1c2UgdmlvbGF0aW9ucwoqIExpcXVvciBsYXcgdmlvbGF0aW9ucwoKKipDcmltaW5hbCBPZmZlbnNlcyoqCgoqIENyaW1pbmFsIGhvbWljaWRlOiBtdXJkZXIgYW5kIG5vbi1uZWdsaWdlbnQgbWFuc2xhdWdodGVyLCBtYW5zbGF1Z2h0ZXIgYnkgbmVnbGlnZW5jZQoqIFNleHVhbCBhc3NhdWx0OiByYXBlLCBmb25kbGluZywgaW5jZXN0LCBzdGF0dXRvcnkgcmFwZQoqIFJvYmJlcnkKKiBBZ2dyYXZhdGVkIGFzc2F1bHQKKiBCdXJnbGFyeQoqIE1vdG9yIHZlaGljbGUgdGhlZnQKKiBBcnNvbgoKKipIYXRlIENyaW1lcyoqCgoqIChhbnkgcHJldmlvdXNseS1tZW50aW9uZWQgQ3JpbWluYWwgT2ZmZW5zZSkKKiBMYXJjZW55LXRoZWZ0CiogU2ltcGxlIGFzc2F1bHQKKiBJbnRpbWlkYXRpb24KKiBEZXN0cnVjdGlvbi9kYW1hZ2UvdmFuZGFsaXNtIG9mIHByb3BlcnR5CgoqKlZpb2xlbmNlIEFnYWluc3QgV29tZW4gQWN0IChWQVdBKSBPZmZlbnNlcyoqCgoqIERvbWVzdGljIHZpb2xlbmNlCiogRGF0aW5nIHZpb2xlbmNlCiogU3RhbGtpbmcKCjxiciAvPgoKVGhlIGNyaW1lcyByZXBvcnRlZCBieSBIYW1saW5lIHBlciB0aGUgQ2xlcnkgQWN0IGFyZSBub3QgbGltaXRlZCB0byBjYW1wdXMgYnVpbGRpbmdzIGJ1dCBhbHNvIGluY2x1ZGUgbWFueSByZWxhdGVkIHNwYWNlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29tbXVuaXR5IGluY2x1ZGluZyB0aGUgZm9sbG93aW5nOgoKKiBPbi1jYW1wdXMgKGFueXdoZXJlKQoqIE9uLWNhbXB1cyBzdHVkZW50IGhvdXNpbmcKKiBQdWJsaWMgcHJvcGVydHkgd2l0aGluIGNhbXB1cyBib3VuZHMKKiBQdWJsaWMgcHJvcGVydHkgaW1tZWRpYXRlbHkgYWRqYWNlbnQgdG8gdGhlIGNhbXB1cwoqIE5vbmNhbXB1cyBidWlsZGluZ3MgYW5kIHByb3BlcnR5IG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IGFyZSB1c2VkIGZvciBlZHVjYXRpb25hbCBwdXJwb3NlcyBhbmQgZnJlcXVlbnRseSB1c2VkIGJ5IHN0dWRlbnRzIGJ1dCBub3QgYSBwYXJ0IG9mIHRoZSBjb3JlIGNhbXB1cywgb3IgdGhvc2Ugb3duZWQgb3IgY29udHJvbGxlZCBieSBhIHN0dWRlbnQgb3JnYW5pemF0aW9uIG9mZmljaWFsbHkgcmVjb2duaXplZCBieSB0aGUgaW5zdGl0dXRpb24KCjxiciAvPgoKVGhlc2UgZGF0YSBhcmUgc291cmNlZCBmcm9tIHRoZSBVUyBPZmZpY2Ugb2YgUG9zdHNlY29uZGFyeSBFZHVjYXRpb24gKE9QRSkgW0NhbXB1cyBTYWZldHkgJiBTZWN1cml0eSBkYXRhIHBvcnRhbC5dKGh0dHBzOi8vb3BlLmVkLmdvdi9jYW1wdXNzYWZldHkvIy9jdXN0b21kYXRhL3NlYXJjaCkKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTUpCnJtKGxpc3QgPSBscygpKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShyZWFkeGwpCmxpYnJhcnkoaGFzaCkKCmRhdGFEaXIgPSAiL1VzZXJzL2Jscm9zZW5iZXJnL0Rlc2t0b3AvQ29sbGVnZV9DbGFzc2VzL0hhbWxpbmUvT3JhY2xlL09QRSBDU1MgQ3VzdG9tIERhdGEgMjAyMy0wNC0xNCAwMjMxMTEiCgojZGF0YURpcjIgPSAnL1VzZXJzL2Jscm9zZW5iZXJnL1JTdHVkaW8vb3V0c2lkZV9kYXRhL09QRV9Db2xsZWdlRGF0YS9DcmltZTIwMjJFWENFTC8nCgpIYW1saW5lT3BlSUQgPSAiMDAyMzU0MDAiCgpgYGAKCmBgYHtyfQpmaWxlcyA9IGxpc3QuZmlsZXMoZGF0YURpcikKCmZvciAoaSBpbiAxOmxlbmd0aChmaWxlcykpIHsKICBkYXRhTmFtZSA9IHN0cl9yZXBsYWNlKGZpbGVzW2ldLCAnLmNzdicsICcnKQogIHggPSByZWFkLmNzdihwYXN0ZTAoZGF0YURpciwgJy8nLCBmaWxlc1tpXSkpCiAgYXNzaWduKGRhdGFOYW1lLCB4KQp9CmBgYAoKCgpgYGB7ciB3YXJuaW5nPUZBTFNFfQoKQXJyZXN0cy52YXJpYW50cyA9IGMoCiAgICAgICAgICAgICAgICAgICAgICMiTG9jYWxfU3RhdGVfUG9saWNlIiwKICAgICAgICAgICAgICAgICAgICAgIk9uX2NhbXB1cyIsIAogICAgICAgICAgICAgICAgICAgICAiT25fY2FtcHVzX1N0dWRlbnRfSG91c2luZ19GYWNpbGl0aWVzIiwgCiAgICAgICAgICAgICAgICAgICAgICJOb25jYW1wdXMiLCAKICAgICAgICAgICAgICAgICAgICAgIlB1YmxpY19Qcm9wZXJ0eSIpCgpDcmltaW5hbF9PZmZlbnNlcy52YXJpYW50cyA9IGMoCiAgICAgICAgICAgICAgICAgICAgICJPbl9jYW1wdXMiLCAKICAgICAgICAgICAgICAgICAgICAgIk9uX2NhbXB1c19TdHVkZW50X0hvdXNpbmdfRmFjaWxpdGllcyIsIAogICAgICAgICAgICAgICAgICAgICAiTm9uY2FtcHVzIiwKICAgICAgICAgICAgICAgICAgICAgIlB1YmxpY19Qcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJSZXBvcnRlZF9ieV9Mb2NhbF9TdGF0ZV9Qb2xpY2UiKQoKRGlzY2lwbGluYXJ5X0FjdGlvbnMudmFyaWFudHMgPSBjKAogICAgICAgICAgICAgICAgICAgICAiT25fY2FtcHVzIiwgCiAgICAgICAgICAgICAgICAgICAgICJTdHVkZW50X0hvdXNpbmdfRmFjaWxpdGllcyIsIAogICAgICAgICAgICAgICAgICAgICAiTm9uY2FtcHVzIiwgCiAgICAgICAgICAgICAgICAgICAgICJQdWJsaWNfUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAiUmVwb3J0ZWRfYnlfTG9jYWxfU3RhdGVfUG9saWNlIikKCkhhdGVfQ3JpbWVzLnZhcmlhbnRzID0gYygKICAgICAgICAgICAgICAgICAgICAgIk9uX2NhbXB1cyIsIAogICAgICAgICAgICAgICAgICAgICAiT25fY2FtcHVzX1N0dWRlbnRfSG91c2luZ19GYWNpbGl0aWVzIiwgCiAgICAgICAgICAgICAgICAgICAgICJOb25jYW1wdXMiLCAKICAgICAgICAgICAgICAgICAgICAgIlB1YmxpY19Qcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICJSZXBvcnRlZF9ieV9Mb2NhbF9TdGF0ZV9Qb2xpY2UiKQoKVW5mb3VuZGVkX0NyaW1lcy52YXJpYW50cyA9IGMoKQoKVkFXQV9PZmZlbnNlcy52YXJpYW50cyA9IGMoCiAgICAgICAgICAgICAgICAgICAgICJPbl9jYW1wdXMiLCAKICAgICAgICAgICAgICAgICAgICAgIk9uX2NhbXB1c19TdHVkZW50X0hvdXNpbmdfRmFjaWxpdGllcyIsIAogICAgICAgICAgICAgICAgICAgICAiTm9uY2FtcHVzIiwgCiAgICAgICAgICAgICAgICAgICAgICJQdWJsaWNfUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICAgICAiUmVwb3J0ZWRfYnlfTG9jYWxfU3RhdGVfUG9saWNlIikKCnZhcmlhbnRzID0gaGFzaCgpCnZhcmlhbnRzW1siQXJyZXN0cyJdXSA9IEFycmVzdHMudmFyaWFudHMKdmFyaWFudHNbWyJDcmltaW5hbF9PZmZlbnNlcyJdXSA9IENyaW1pbmFsX09mZmVuc2VzLnZhcmlhbnRzCnZhcmlhbnRzW1siRGlzY2lwbGluYXJ5X0FjdGlvbnMiXV0gPSBEaXNjaXBsaW5hcnlfQWN0aW9ucy52YXJpYW50cwp2YXJpYW50c1tbIkhhdGVfQ3JpbWVzIl1dID0gSGF0ZV9DcmltZXMudmFyaWFudHMKdmFyaWFudHNbWyJVbmZvdW5kZWRfQ3JpbWVzIl1dID0gYygiIikKdmFyaWFudHNbWyJWQVdBX09mZmVuc2VzIl1dID0gVkFXQV9PZmZlbnNlcy52YXJpYW50cwoKIyBmb3IgKGkgaW4gMTpsZW5ndGgoQXJyZXN0cy52YXJpYW50cykpIHsKIyAgIGFkZDIxKCJBcnJlc3RzIiwgQXJyZXN0cy52YXJpYW50c1tpXSkKIyB9CiMgCiMgZm9yIChpIGluIDE6bGVuZ3RoKENyaW1pbmFsX09mZmVuc2VzLnZhcmlhbnRzKSkgewojICAgYWRkMjEoIkNyaW1pbmFsX09mZmVuc2VzIiwgQ3JpbWluYWxfT2ZmZW5zZXMudmFyaWFudHNbaV0pCiMgfQoKY29tYmluZVRhYmxlcyA9IGZ1bmN0aW9uKHByZWZpeCkgewogIHRfdmFyaWFudHMgPSB2YXJpYW50c1tbcHJlZml4XV0KICBwYXJlbnRfdGFibGUgPSBkYXRhLmZyYW1lKCkKICAKICAjcHJpbnQodF92YXJpYW50cykKICAKICBmb3IgKGkgaW4gMTpsZW5ndGgodF92YXJpYW50cykpIHsKICAgIHRhYmxlTmFtZSA9IHBhc3RlKHByZWZpeCwgdF92YXJpYW50c1tpXSwgc2VwPSJfIikKICAgIGlmIChlbmRzV2l0aCh0YWJsZU5hbWUsICJfIikpIHsKICAgICAgdGFibGVOYW1lID0gdGFibGVOYW1lWzE6bmNoYXIodGFibGVOYW1lLTEpXQogICAgfQogICAgI3ByaW50KHRhYmxlTmFtZSkKICAgIHRhYmxlXyA9IGdldCh0YWJsZU5hbWUpCiAgICBpZiAobnJvdyh0YWJsZV8pID4gMCkgewogICAgICBpZiAobGVuZ3RoKG5hbWVzKHBhcmVudF90YWJsZSkpPT0wKSB7CiAgICAgICAgcGFyZW50X3RhYmxlID0gdGFibGVfICU+JSBzZWxlY3QoU3VydmV5LnllYXIsIFVuaXRpZCwgSW5zdGl0dXRpb24ubmFtZSwgT1BFSUQsIEluc3RpdHV0aW9uLlNpemUpCiAgICAgIH0KICAgICAgdGFibGVfID0gdGFibGVfICU+JSBzZWxlY3QoLWMoCiAgICAgICAgVW5pdGlkLCAKICAgICAgICBJbnN0aXR1dGlvbi5uYW1lLCAKICAgICAgICBPUEVJRCwgCiAgICAgICAgQ2FtcHVzLklELCAKICAgICAgICBDYW1wdXMuTmFtZSwgCiAgICAgICAgSW5zdGl0dXRpb24uU2l6ZSkpICU+JQogICAgICAgIHJlbmFtZV93aXRoKCB+IHBhc3RlKHRfdmFyaWFudHNbaV0sIC54LCBzZXA9Il9fIikpICU+JQogICAgICAgIHJlbmFtZShTdXJ2ZXkueWVhciA9IHBhc3RlKHRfdmFyaWFudHNbaV0sICJTdXJ2ZXkueWVhciIsIHNlcD0iX18iKSkKICAgICAgI3ByaW50KHRhYmxlXykKICAgICAgdGFibGVfW2lzLm5hKHRhYmxlXyldIDwtIDAKCiAgCiAgICAgIHBhcmVudF90YWJsZSA9IGZ1bGxfam9pbihwYXJlbnRfdGFibGUsIHRhYmxlXywgYnk9IlN1cnZleS55ZWFyIikKICAgICAgfQogIH0KICByZXR1cm4ocGFyZW50X3RhYmxlKQp9CmBgYAoKYGBge3J9CkFycmVzdHMuY29tYmluZWQgPSBjb21iaW5lVGFibGVzKCJBcnJlc3RzIikKQ3JpbWluYWxPZmZlbnNlcy5jb21iaW5lZCA9IGNvbWJpbmVUYWJsZXMoIkNyaW1pbmFsX09mZmVuc2VzIikKRGlzY2lwbGluYXJ5QWN0aW9ucy5jb21iaW5lZCA9IGNvbWJpbmVUYWJsZXMoIkRpc2NpcGxpbmFyeV9BY3Rpb25zIikKSGF0ZUNyaW1lcy5jb21iaW5lZCA9IGNvbWJpbmVUYWJsZXMoIkhhdGVfQ3JpbWVzIikKCiNVbmZvdW5kZWQuY29tYmluZWQgPSBjb21iaW5lVGFibGVzKCJVbmZvdW5kZWRfQ3JpbWVzIikKVkFXQS5jb21iaW5lZCA9IGNvbWJpbmVUYWJsZXMoIlZBV0FfT2ZmZW5zZXMiKSAlPiUgZmlsdGVyKFN1cnZleS55ZWFyICE9IDIwMTQpCmBgYAoKYGBge3J9Cgpub0luY2lkZW50cyA9IGhhc2goKQoKdml6ID0gZnVuY3Rpb24odGFibGVfLCBzZWN0aW9uPSIiKSB7CiAgdG9WaXogPSBuYW1lcyh0YWJsZV8gJT4lIHNlbGVjdCgtYyhTdXJ2ZXkueWVhciwgVW5pdGlkLCBJbnN0aXR1dGlvbi5uYW1lLCBPUEVJRCwgSW5zdGl0dXRpb24uU2l6ZSkpKQogIAogIGZvciAoaSBpbiAxOmxlbmd0aCh0b1ZpeikpIHsKICAgIHRhYmxlX1tpcy5uYSh0YWJsZV8pXSA8LSAwCiAgICAKICAgIHBlYWsgPSBtYXgodGFibGVfW1t0b1ZpeltpXV1dLCBuYS5ybT1UKQogICAgCiAgICBpZiAoIHBlYWs8PTEgKSB7CiAgICAgIGhpZ2hlc3QgPSAxCiAgICB9IGVsc2UgewogICAgICBoaWdoZXN0ID0gcGVhawogICAgfQogICAgCgogICAgYm51bSA9IDEKICAgIGlmIChwZWFrID4gMTUpIHsKICAgICAgYm51bSA9IDUKICAgIH0KICAgIAogICAgCiAgICB0ID0gc3RyX3RvX3RpdGxlKAogICAgICAgICAgc3RyX3JlcGxhY2VfYWxsKAogICAgICAgICAgICBzdHJfcmVwbGFjZV9hbGwodG9WaXpbaV0sICJfXyIsICJcbiIgKSwgIlxcLnxfIiwgIiAiKSkKCiAgICBwbHRfID0gdGFibGVfICU+JQogICAgICBnZ3Bsb3QoYWVzX3N0cmluZyh4PSJTdXJ2ZXkueWVhciIsIHk9dG9WaXpbaV0sIGZpbGw9dG9WaXpbaV0pKSArIAogICAgICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIsIG5hLnJtPVQpICsgCiAgICAgIGxhYnMoeD0iWWVhciIsIHk9dCwgdGl0bGU9dCkgKwogICAgICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDAsIDIwMjIsIGJ5ID0gMSksIGxpbWl0cz1jKDIwMDAsIDIwMjIpKSArIAogICAgICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIGhpZ2hlc3QrMSwgYnkgPSBibnVtKSwgbGltaXRzPWMoMCxoaWdoZXN0KzEpKSArCiAgICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gLTQ1LCB2anVzdCA9IDAsIGhqdXN0PTApLAogICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGw9IndoaXRlIiksCiAgICAgICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3Q9MC41KSkgKyAKICAgICAgZ3VpZGVzKGZpbGw9Im5vbmUiKQogICAgCiAgICBpZiAocGVhaz09MCkgewogICAgICAjcGx0ID0gcGx0K2dlb21fbGFiZWwoYWVzKHg9MjAxMSwgeT0wLjUsIGxhYmVsPSJOTyBJTkNJREVOVFMgUkVDT1JERUQiKSwgZmlsbD0ibGlnaHRncmF5IikKICAgICAgaWYgKG5jaGFyKHNlY3Rpb24pID4gMCkgewogICAgICAgICN0ID0gcGFzdGUocGFzdGUwKCIqKiIsc2VjdGlvbiwiKioiKSwgdCwgc2VwPSI8YnI+IC0gIikKICAgICAgICAKICAgICAgfQogICAgICBpZiAoIShzZWN0aW9uICVpbiUgbmFtZXMobm9JbmNpZGVudHMpKSkgewogICAgICAgIG5vSW5jaWRlbnRzW1tzZWN0aW9uXV0gPSBoYXNoKCkKICAgICAgfQogICAgICBzdWJzZWN0aW9uID0gc3RyX3NwbGl0X2kodCwgIlxuIiwgMSkKICAgICAgc3Vic3ViID0gc3RyX3NwbGl0X2kodCwgIlxuIiwgMikKICAgICAgaWYgKCEoc3Vic2VjdGlvbiAlaW4lIG5hbWVzKG5vSW5jaWRlbnRzW1tzZWN0aW9uXV0pKSkgewogICAgICAgIG5vSW5jaWRlbnRzW1tzZWN0aW9uXV1bW3N1YnNlY3Rpb25dXSA9IGMoKQogICAgICB9ICAgICAgCiAgICAgIG5vSW5jaWRlbnRzW1tzZWN0aW9uXV1bW3N1YnNlY3Rpb25dXSA9IGMobm9JbmNpZGVudHNbW3NlY3Rpb25dXVtbc3Vic2VjdGlvbl1dLCBjKHN1YnN1YikpCiAgICB9IGVsc2UgewogICAgICBwcmludChwbHRfKQogICAgfQogIH0KfQpgYGAKCiMgVGhlIERhdGEKCjxiciAvPgo8YnIgLz4KCiMjIEFycmVzdHMKCmBgYHtyfQp2aXooQXJyZXN0cy5jb21iaW5lZCwgIkFycmVzdHMiKQpgYGAKCiMjIERpc2NpcGxpbmFyeSBBY3Rpb25zCgpgYGB7cn0Kdml6KERpc2NpcGxpbmFyeUFjdGlvbnMuY29tYmluZWQsICJEaXNjaXBsaW5hcnkgQWN0aW9ucyIpCmBgYAoKIyMgQ3JpbWluYWwgT2ZmZW5zZXMKCmBgYHtyfQp2aXooQ3JpbWluYWxPZmZlbnNlcy5jb21iaW5lZCAlPiUgc2VsZWN0X2lmKH4hKGFsbChpcy5uYSguKSkgfCBhbGwoLiA9PSAwKSkpLCAiQ3JpbWluYWwgT2ZmZW5zZXMiKQpgYGAKCiMjIEhhdGUgQ3JpbWVzCgpgYGB7cn0Kdml6KEhhdGVDcmltZXMuY29tYmluZWQsICJIYXRlIENyaW1lcyIpCmBgYAoKy4YKCiMjICBWaW9sZW5jZSBBZ2FpbnN0IFdvbWVuIEFjdCAoVkFXQSkgT2ZmZW5zZXMKCmBgYHtyIHdhcm5pbmc9RkFMU0V9CnZpeihWQVdBLmNvbWJpbmVkLCAiVkFXQSBPZmZlbnNlcyIpCmBgYAoKIyMgQ2F0ZWdvcmllcyB3aXRoIE5vIEluY2lkZW50cyBSZXBvcnRlZAoKYGBge3J9CgpvdXRTdHIgPSAiIgoKZm9yIChpIGluIDE6bGVuZ3RoKG5hbWVzKG5vSW5jaWRlbnRzKSkpIHsKICBvdXRTdHIgPSBwYXN0ZShvdXRTdHIsIHBhc3RlMCgiKioiLCBuYW1lcyhub0luY2lkZW50cylbaV0sICIqKiIpLCBzZXA9Ijxicj48YnI+PGJyPiIpCiAgdG9wTmFtZSA9IG5hbWVzKG5vSW5jaWRlbnRzKVtpXQogIHN1Yk5hbWVzID0gbmFtZXMobm9JbmNpZGVudHNbW3RvcE5hbWVdXSkKICBmb3IgKGogaW4gMTpsZW5ndGgoc3ViTmFtZXMpKSB7CiAgICBzdWJOYW1lID0gc3ViTmFtZXNbal0KICAgIG91dFN0ciA9IHBhc3RlKG91dFN0ciwgcGFzdGUwKCJfXyAqIiwgc3ViTmFtZSwgIioiKSwgc2VwPSI8YnI+PGJyPiIpCiAgICBpdGVtcyA9IG5vSW5jaWRlbnRzW1t0b3BOYW1lXV1bW3N1Yk5hbWVdXQogICAgb3V0U3RyID0gcGFzdGUob3V0U3RyLCBwYXN0ZTAoIl9fX19fXyIsIHBhc3RlKGl0ZW1zLCBjb2xsYXBzZSA9ICI8YnI+X19fX19fIikpLCBzZXA9Ijxicj4iKQogIH0KfQoKI3ByaW50KG91dFN0cikKYGBgCgoKYHIgb3V0U3RyYAo=